var dataBase = {
    config: {
        dbName: 'personDB',     // 数据库名
        daVer: 1,              // 数据库版本号
        db: ''                 // 用于数据库对象
    },

    /**
     * 连接数据库
     * @param {function} callback 回调函数
     */
    openDB: function (callback) {
        var request = indexedDB.open(this.config.dbName, this.config.daVer);
        request.onsuccess = function (e) {
            dataBase.config.db = e.target.result;
            console.log('连接数据库成功');
            callback && callback();
        }
        request.onerror = function () {
            console.log('连接数据库失败');
        }
        request.onupgradeneeded = function (e) {
            dataBase.config.db = e.target.result;
            // 如果不存在Persons对象仓库则创建
            if (!dataBase.config.db.objectStoreNames.contains('Persons')) {
                var store = dataBase.config.db.createObjectStore('Persons', { keyPath: 'id', autoIncrement: true });
                var idx = store.createIndex('index', 'name', { unique: false })
            }
        }
    },

    /**
     * 保存数据
     * @param {Object} data 要保存到数据库的数据对象
     * @param {function} callback 回调函数，参数为新增加的ID
     */
    saveData: function (data,callback) {
        var tx = dataBase.config.db.transaction('Persons', 'readwrite');
        var store = tx.objectStore('Persons');
        var req = store.put(data);
        req.onsuccess = function () {
            //保存数据成功之后执行回调函数
            callback && callback(req.result);
        }
    },

    /**
     * 删除单条数据
     * @param {int} id 要删除的数据主键
     * @param {function} callback 回调函数
     */
    deleteOneData: function (id,callback) {
        var tx = dataBase.config.db.transaction('Persons', 'readwrite');
        var store = tx.objectStore('Persons');
        var req = store.delete(id);
        req.onsuccess = function () {
            // 删除数据成功之后执行回调函数
            callback && callback();
        }
    },

    /**
     * 根据关键字检索全部数据
     * @param {string} keyword 查询的关键字
     * @param {function} callback 回调函数
     */
    searchData: function (keyword,callback) {
        var tx = dataBase.config.db.transaction('Persons', 'readonly');
        var store = tx.objectStore('Persons');
        var range = IDBKeyRange.lowerBound(1);
        var req = store.openCursor(IDBKeyRange.lowerBound(1), 'next');
        // 每次检索重新清空存放数据数组
        var dbData = [];
        req.onsuccess = function () {
            var cursor = this.result;
            if (cursor) {
                // 把检索到的值push到数组中
                if (cursor.value.name.indexOf(keyword) !== -1) {
                    dbData.push(cursor.value);
                }
                cursor.continue();
            } else {
                // 数据检索完成后执行回调函数
                callback && callback(dbData);
            }
        }
    },
    /**
     * 检索全部数据
     * @param {function} callback 回调函数
     */
    searchAll: function (callback) {
        var tx = dataBase.config.db.transaction('Persons', 'readonly');
        var store = tx.objectStore('Persons');
        var range = IDBKeyRange.lowerBound(1);
        var req = store.openCursor(IDBKeyRange.lowerBound(1), 'next');
        // 每次检索重新清空存放数据数组
        var dbData = [];
        req.onsuccess = function () {
            var cursor = this.result;
            if (cursor) {
                // 把检索到的值push到数组中
                dbData.push(cursor.value);
                cursor.continue();
            } else {
                // 数据检索完成后执行回调函数
                callback && callback(dbData);
            }
        }
    },
    /**
     * 根据关键字检索全部数据
     * @param {string} keyword 查询的关键字
     * @param {function} callback 回调函数
     */
    search:function (keyword,callback){
        keyword?this.searchData(keyword,callback):this.searchAll(callback);
    }
};